### Project 34 Slimme Huis **1. Beschrijving** In dit project simuleren we het slimme huis met de inventor kit. **Opmerkingen** 1. Je moet een 2.4GHz frequentie WIFI voorbereiden, geen 5GHz frequentie. Dit kan een mobiele hotspot of een router zijn. 2. De ESP32 board verbruikt meer stroom wanneer verbonden met het netwerk, dus je moet een externe voeding aansluiten op deze kit. We leveren een 6XAA Batterijhouder (batterijen niet inbegrepen), die je kunt aansluiten op de DC-poort van de ESP32 geïntegreerde board. ![](media/B62.png)![](media/B63.png) 3. Wanneer je andere apparaten gebruikt om deze kit te bedienen, moet de ESP32 board verbonden zijn met hetzelfde netwerk als je bedieningsapparaat. 4. Onthoud je wifi-netwerknaam en wachtwoord en vul deze in de code in voordat je deze uploadt. ``` const char* ssid = "your_SSID"; // Vul WiFi naam in, bijvoorbeeld,= "KEYES" const char* password = "your_password"; // Vul WiFi wachtwoord in, bijvoorbeeld,= "123456" ``` **2. Aansluitschema** ![](media/B64.png) **3. Code Uploaden** ``` #include #include #include #include LiquidCrystal_I2C lcd(0x27, 16, 2); // WiFi configuratie const char* ssid = "your-SSID"; // jouw WiFi naam const char* password = "your-PASSWORD"; // jouw WiFi wachtwoord // DHT11 configuratie xht11 xht(26); // stel DHT11 sensor pin in op IO26 unsigned char dat[] = { 0, 0, 0, 0 }; // Definieer een array om temperatuur- en vochtigheidswaarden op te slaan int i = 0; // fotoresistor analoge pin #define LDR_PIN 34 // sluit de fotoresistor aan op GPIO 34 // LED pinnen #define redLED_PIN 12 #define yellowLED_PIN 13 #define greenLED_PIN 14 #define blueLED_PIN 15 // LED status bool redLEDState = false; bool yellowLEDState = false; bool greenLEDState = false; bool blueLEDState = false; // Webserver AsyncWebServer server(80); String generateHTML() { String html = ""; html += ""; // Automatisch verversen elke 5 seconden html += ""; // temperatuur html += "

Sensor Data

"; html += "
"; html += "

Temperatuur

"; html += "

" + String(dat[2]) + " °C

"; html += "
"; // vochtigheid html += "
"; html += "

Vochtigheid

"; html += "

" + String(dat[0]) + " %

"; html += "
"; // toon fotoresistor weerstandwaarde int lightValue = analogRead(LDR_PIN); // fotoresistor waarde html += "
"; html += "

Lichtsterkte

"; html += "

" + String(lightValue) + "

"; html += "
"; // LED bedieningsknoppen html += "

LED's bedienen

"; html += ""; html += ""; html += ""; html += ""; // JavaScript voor LED aan/uit schakelen html += ""; html += ""; return html; } void setup() { // Initialiseer seriële poort Serial.begin(115200); lcd.init(); // initialiseer de lcd lcd.backlight(); lcd.setCursor(0, 0); lcd.print("IP:"); // WiFi verbinding WiFi.begin(ssid, password); while (WiFi.status() != WL_CONNECTED) { lcd.setCursor(i, 1); lcd.print("."); delay(500); i++; if (i > 15) { i = 0; lcd.setCursor(0, 1); lcd.print(" "); } } lcd.setCursor(0, 1); lcd.print(" "); lcd.setCursor(0, 1); lcd.print(WiFi.localIP()); // Stel LED pinnen in als output pinMode(redLED_PIN, OUTPUT); pinMode(yellowLED_PIN, OUTPUT); pinMode(greenLED_PIN, OUTPUT); pinMode(blueLED_PIN, OUTPUT); // Verwerk webverzoeken server.on("/", HTTP_GET, [](AsyncWebServerRequest* request) { if (!xht.receive(dat)) { Serial.println("sensor fout"); } String html = generateHTML(); request->send(200, "text/html", html); }); // Bedien de LED's server.on("/toggle", HTTP_GET, [](AsyncWebServerRequest* request) { String led = request->getParam("led")->value(); int ledNum = led.toInt(); if (ledNum == 0) { redLEDState = !redLEDState; digitalWrite(redLED_PIN, redLEDState ? HIGH : LOW); // LED 1 } else if (ledNum == 1) { yellowLEDState = !yellowLEDState; digitalWrite(yellowLED_PIN, yellowLEDState ? HIGH : LOW); // LED 2 } else if (ledNum == 2) { greenLEDState = !greenLEDState; digitalWrite(greenLED_PIN, greenLEDState ? HIGH : LOW); // LED 3 } else if (ledNum == 3) { blueLEDState = !blueLEDState; digitalWrite(blueLED_PIN, blueLEDState ? HIGH : LOW); // LED 4 } request->redirect("/"); // Ga terug naar de startpagina }); // Start de webserver server.begin(); } void loop() { // Lees de temperatuur- en vochtigheidswaarden en werk de webpagina bij if (!xht.receive(dat)) { Serial.println("sensor fout"); } delay(2000); // Vernieuw de pagina elke 2 seconden } ``` **4. Testresultaat** Na het uploaden van de code toont de LCD1602 het IP-adres. Open de browser, voer het IP-adres in en je ziet de bedieningspagina. Op dit moment kun je met het bedieningsapparaat de door de sensor uitgelezen waarde lezen en ook de LED aan- en uitzetten. ![](media/B65.jpg)